#include "ClientHandler.h"

ClientHandler::ClientHandler(Socket *s, GeneradorDeVariables* g)
{	
    socket = s;
    genDeVariable = g;
    parar = false;	
}				
void ClientHandler:: main()
{
	std::string comando, resultado;
	bool fin = false;
	while(!parar && !fin && *socket)
	{
	    recibirMensaje(comando);
	    if (ejecutarComando(comando, resultado)!=-1)
	    	enviarMensaje(resultado);
	    else 
	    	enviarMensaje("ERROR");
	}	
}

ClientHandler::~ClientHandler()
{
	delete socket;
}

int ClientHandler::enviarMensaje(std::string msj)
{
	std::stringstream ss;
	ss<<msj.size();
    std::string tamanio;
	ss>>tamanio;
    // se completa 'tamanio' con el caracter ' '
    std::string aux;
    if (tamanio.size()<TAMANIO_CABECERA_MSJS)
    {
    	aux.assign(TAMANIO_CABECERA_MSJS-tamanio.size(), ' ');
    	tamanio+=aux;
    }
    // se envia 'tamanio'
    socket->send(tamanio);
    // se envia 'msj'
    socket->send(msj);
    return 0;	
}

int ClientHandler::recibirMensaje(std::string& msj)
{
	std::string tamanio;
	socket->recv(tamanio, TAMANIO_CABECERA_MSJS);
	socket->recv(msj, atoi(tamanio.c_str()));
	return 0;	
}

int ClientHandler::ejecutarComando(std::string comando, std::string& resultado)
{
	int error = 0;
	unsigned posEspacio = comando.find(' ');printf("%s ",comando.c_str());
	//std::string var = comando.substr(0, posEspacio);printf("%s ",var.c_str());
	//unsigned pos2Espacio = comando.find(' ', posEspacio+1);
	//unsigned dia = atoi((comando.substr(posEspacio+1,pos2Espacio-posEspacio)).c_str());printf("%d ",dia);
	
	//std::string area = comando.substr(posEspacio+1);printf("%s",var.c_str());
	//genDeVariable->generarVariable(dia, var, resultado);
	genDeVariable->generarVariable(3, "lluvia", resultado);//printf("%s",resultado.c_str());
	//for (unsigned i=0;i<1000;i++) resultado += "a";
	return error;	
}


